home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48hor1 / usrlib.doc < prev    next >
Text File  |  1995-03-31  |  7KB  |  141 lines

  1. [Note: this is users' comments; see USRLIB.TXT for HP's documentation.  -jkh-] 
  2.  
  3. Author: Joel Nevison; replies by Preston Brown & David Ochs. 
  4.   Subj: USRLIB 
  5.   Date: Fri Jul 27 1990 07:01  
  6.  
  7. Hi folks. 
  8. I finally got USRLIB going, after fussing with a pc clone that apparently 
  9. isn't configured correctly for the USRLIB program. (Crashed hard) 
  10. Using libraries to make programs hidden, but globally accessible is great! 
  11. I have a few programs that I access from redefined keys and I really 
  12. don't need to modify them or even see their names in VAR. 
  13. These are perfect candidates for library objects. 
  14.  
  15. Some observations:  
  16. 1)I had to send my directory to the pc in binary mode, but had to 
  17.   receive the library back in ascii. 
  18. 2)The library detaches itself whenever I do a system halt (ON C). 
  19. 3)I put some general utilities in a library that are used by a number 
  20.   of other programs and I noticed that the other programs can't use 
  21.   the library routine unless I edit them after the library has been 
  22.   attached. (Ditto with key definitions) 
  23. 4)If I make more than one library they can't call each other's routines.  
  24. 5)I saved about 400 bytes by putting 6k of stuff into a library. 
  25.  
  26. Some questions: 
  27. 1)Does anybody know of any ways to work around or minimize the above 
  28.   phenomena?  Especially 3 and 4 above. 
  29. 2)I have not hooked up to the hp bulletin board, is there any info 
  30.   regarding USRLIB that I'm missing?  Any other good stuff from  
  31.   there that hasn't made it to comp.sys.handhelds or the mailing list? 
  32. 3)what kind of things are others out there doing with libraries? 
  33.  
  34. Joel 
  35.  
  36. ---------- 
  37.   Resp: 1 of 2 by prestonb at hpcvra.CV.HP.COM 
  38. Author: [Preston Brown] 
  39.   Date: Fri Jul 27 1990 09:02  
  40.  
  41. 2)The library detaches itself whenever I do a system halt (ON C). 
  42.  
  43. Include an object named $CONFIG in the library which has the attach 
  44. command.  The $CONFIG will be executed whenever a system halt is 
  45. executed. 
  46.  
  47. Preston 
  48.  
  49. ---------- 
  50.   Resp: 2 of 2 by daveo at hpcvra.CV.HP.COM 
  51. Author: [Dave Ochs] 
  52.   Date: Fri Jul 27 1990 17:02  
  53.  
  54. >3)I put some general utilities in a library that are used by a number 
  55. >  of other programs and I noticed that the other programs can't use 
  56. >  the library routine unless I edit them after the library has been 
  57. >  attached. (Ditto with key definitions) 
  58. >4)If I make more than one library they can't call each other's routines.  
  59. ... 
  60. >1)Does anybody know of any ways to work around or minimize the above 
  61. >  phenomena?  Especially 3 and 4 above. 
  62.  
  63. These two questions are related. 
  64.  
  65. When you enter or edit a program, the program is parsed and compiled as it is 
  66. created from the edit line.  More specifically, references to other objects may 
  67. be compiled in several forms depending on the current state of the calculator 
  68. WHEN THE PROGRAM IS COMPILED.  If your program is \<< abc \>>, the compiler 
  69. first looks for an object named 'abc' in the current directory, then it looks 
  70. for an object 'abc' in any libraries attached to the current directory.  If no 
  71. matches are found, the same search occurs in the parent directory, then its 
  72. parent, etc.  until you reach HOME. 
  73.  
  74. If a user object is found (or no match is found), the reference is stored as a 
  75. name (which will be evaluated at run time).  If an object in a library is 
  76. found, the reference is stored as an XLIB name.  At runtime, the specified XLIB 
  77. object is searched for ... if it isn't there, the program will error. 
  78.  
  79. In question 3 above, you must recompile each program that references an XLIB 
  80. object in order to change the variable names into libarary XLIB names.  The 
  81. following program, which I will call COMPDIR, will recompile each object in the 
  82. current directory by converting each into a string and then back again. 
  83.  
  84. \<<  
  85.     VARS OBJ\-> 1 SWAP 
  86.     START 
  87.         DUP RCL \->STR OBJ\-> SWAP STO 
  88.     NEXT 
  89. \>> 
  90.  
  91. It will be easiest if you have a $CONFIG program for each library of the form 
  92. \<< 800 ATTACH \>>, where 800 is the library id; otherwise you will need to 
  93. re-attach the library every time the HP48 warmstarts (which occurs after you 
  94. store a library in a port).  The $CONFIG program runs each time the calculator 
  95. warmstarts, saving you the bother of re-attaching.  THE INSTRUCTIONS BELOW 
  96. ASSUME THAT YOUR LIBARIES AUTO-ATTACH. 
  97.  
  98. It is also possible to have two libraries refer to each other.  An example 
  99. would probably make it clearest.  I will create two libraries, ALIB and BLIB. 
  100. After debugging the programs, the objects that will in each library should be 
  101. moved into separate directories (e.g.  directories 'A' and 'B').  The following 
  102. procedure works ...  it is assumed that you already know how to transfer 
  103. directories/libraries in binary form, etc. 
  104.  
  105. 1.  Transfer directory A to your PC, and create library ALIB with 'usrlib'. 
  106.     References in ALIB to routines in ALIB are now XLIB names. 
  107. 2.  Transfer ALIB to your HP 48, and store it in port 0.  Turn your HP48 
  108.     off and on (it will warmstart and clear the stack). 
  109. 3.  Run COMPDIR on the B directory.  References in directory B to routines 
  110.     in ALIB are now XLIB names.  
  111. 4.  Transfer directory B to your PC, and create library BLIB with 'usrlib'. 
  112.     References in BLIB to routines in BLIB or ALIB are now XLIB names. 
  113. 5.  DETACH and PURGE library ALIB from port 0 (you will probably want to 
  114.     remove the user variable version too). 
  115. 6.  Transfer BLIB to your HP 48, and store it in port 0.  Turn your HP48 
  116.     off and on.   
  117. 7.  Run COMPDIR on the A directory.  References in directory A to routines 
  118.     in BLIB are now XLIB names. 
  119. 8.  Transfer directory A to your PC, and create library ALIB with 'usrlib'. 
  120.     References in ALIB to routines in ALIB or BLIB are now XLIB names. 
  121. 9.  Transfer ALIB to your HP 48, and store it in port 0.  Turn your HP48 
  122.     off and on.  
  123.  
  124. Some thoughts: 
  125.  
  126. -   Don't mess with the A or B directories while doing this procedure, since 
  127.     XLIB names depend on variable order within the directory, among other 
  128.     things. 
  129. -   Neither library can be completely functional alone, since they each refer 
  130.     to the other, so why have two? 
  131. -   It is MUCH easier to create "nested" libraries, where lib B uses routines 
  132.     from lib A, lib C uses routines from libs A and B, etc.  It is also much 
  133.     easier to remember their relationship.  A can be used independently, B 
  134.     requires A, C requires B and A, etc. 
  135. -   Enough already. 
  136.  
  137.  
  138. Dave Ochs 
  139. daveo@hp-pcd.hp.com 
  140.